<?php

namespace JLPay\Models\Trans\Common;

use JLPay\Models\BaseResponse;

/**
 * 预授权关闭响应模型
 */
class PreAuthCloseResponse extends BaseResponse
{
    /**
     * @var string|null 状态 2：成功 3：失败
     */
    protected ?string $status = null;

    /**
     * @var string|null 商户号
     */
    protected ?string $mchId = null;

    /**
     * @var string|null 终端号
     */
    protected ?string $termNo = null;

    /**
     * @var string|null 设备信息
     */
    protected ?string $deviceInfo = null;

    /**
     * @var string|null 平台订单号
     */
    protected ?string $transactionId = null;

    /**
     * @var string|null 外部订单号
     */
    protected ?string $outTradeNo = null;

    /**
     * @var string|null 订单时间
     */
    protected ?string $orderTime = null;

    /**
     * @var string|null 交易时间
     */
    protected ?string $transTime = null;

    /**
     * @var string|null 交易类型
     */
    protected ?string $payType = null;

    /**
     * 构造函数
     *
     * @param array|null $responseArray 响应数组
     */
    public function __construct(?array $responseArray = null)
    {
        parent::__construct($responseArray);

        if ($responseArray) {
            $this->status = $responseArray['status'] ?? null;
            $this->mchId = $responseArray['mch_id'] ?? null;
            $this->termNo = $responseArray['term_no'] ?? null;
            $this->deviceInfo = $responseArray['device_info'] ?? null;
            $this->transactionId = $responseArray['transaction_id'] ?? null;
            $this->outTradeNo = $responseArray['out_trade_no'] ?? null;
            $this->orderTime = $responseArray['order_time'] ?? null;
            $this->transTime = $responseArray['trans_time'] ?? null;
            $this->payType = $responseArray['pay_type'] ?? null;
        }
    }

    /**
     * 设置状态
     *
     * @param string $status 状态
     * @return $this
     */
    public function setStatus(string $status): self
    {
        $this->status = $status;
        return $this;
    }

    /**
     * 获取状态
     *
     * @return string|null 状态
     */
    public function getStatus(): ?string
    {
        return $this->status;
    }

    /**
     * 设置商户号
     *
     * @param string $mchId 商户号
     * @return $this
     */
    public function setMchId(string $mchId): self
    {
        $this->mchId = $mchId;
        return $this;
    }

    /**
     * 获取商户号
     *
     * @return string|null 商户号
     */
    public function getMchId(): ?string
    {
        return $this->mchId;
    }

    /**
     * 设置终端号
     *
     * @param string $termNo 终端号
     * @return $this
     */
    public function setTermNo(string $termNo): self
    {
        $this->termNo = $termNo;
        return $this;
    }

    /**
     * 获取终端号
     *
     * @return string|null 终端号
     */
    public function getTermNo(): ?string
    {
        return $this->termNo;
    }

    /**
     * 设置设备信息
     *
     * @param string $deviceInfo 设备信息
     * @return $this
     */
    public function setDeviceInfo(string $deviceInfo): self
    {
        $this->deviceInfo = $deviceInfo;
        return $this;
    }

    /**
     * 获取设备信息
     *
     * @return string|null 设备信息
     */
    public function getDeviceInfo(): ?string
    {
        return $this->deviceInfo;
    }

    /**
     * 设置平台订单号
     *
     * @param string $transactionId 平台订单号
     * @return $this
     */
    public function setTransactionId(string $transactionId): self
    {
        $this->transactionId = $transactionId;
        return $this;
    }

    /**
     * 获取平台订单号
     *
     * @return string|null 平台订单号
     */
    public function getTransactionId(): ?string
    {
        return $this->transactionId;
    }

    /**
     * 设置外部订单号
     *
     * @param string $outTradeNo 外部订单号
     * @return $this
     */
    public function setOutTradeNo(string $outTradeNo): self
    {
        $this->outTradeNo = $outTradeNo;
        return $this;
    }

    /**
     * 获取外部订单号
     *
     * @return string|null 外部订单号
     */
    public function getOutTradeNo(): ?string
    {
        return $this->outTradeNo;
    }

    /**
     * 设置订单时间
     *
     * @param string $orderTime 订单时间
     * @return $this
     */
    public function setOrderTime(string $orderTime): self
    {
        $this->orderTime = $orderTime;
        return $this;
    }

    /**
     * 获取订单时间
     *
     * @return string|null 订单时间
     */
    public function getOrderTime(): ?string
    {
        return $this->orderTime;
    }

    /**
     * 设置交易时间
     *
     * @param string $transTime 交易时间
     * @return $this
     */
    public function setTransTime(string $transTime): self
    {
        $this->transTime = $transTime;
        return $this;
    }

    /**
     * 获取交易时间
     *
     * @return string|null 交易时间
     */
    public function getTransTime(): ?string
    {
        return $this->transTime;
    }

    /**
     * 设置交易类型
     *
     * @param string $payType 交易类型
     * @return $this
     */
    public function setPayType(string $payType): self
    {
        $this->payType = $payType;
        return $this;
    }

    /**
     * 获取交易类型
     *
     * @return string|null 交易类型
     */
    public function getPayType(): ?string
    {
        return $this->payType;
    }

    /**
     * 转换为数组格式
     *
     * @return array 数组格式的数据
     */
    public function toArray(): array
    {
        $data = parent::toArray();
        $data = array_merge($data, [
            'status' => $this->status,
            'mch_id' => $this->mchId,
            'term_no' => $this->termNo,
            'device_info' => $this->deviceInfo,
            'transaction_id' => $this->transactionId,
            'out_trade_no' => $this->outTradeNo,
            'order_time' => $this->orderTime,
            'trans_time' => $this->transTime,
            'pay_type' => $this->payType
        ]);

        return $data;
    }
} 